package com.indexingsystem.boss.common.session;

import java.util.List;

import org.apache.shiro.config.Ini;
import org.springframework.beans.factory.FactoryBean;

import com.indexingsystem.boss.common.Permission;

/**
 * 
 * 功能说明: 授权元数据根据两部分构成：
 * 1、数据库中动态生成，权限表获取
 * 2、使用spring的注入filterChainDefinitions，在配置文件中定义默认的安全定义，如登录页面，首页等
 * @author hxt
 * @date:2016-02-01 
 * @version: v1.0
 */
public class ChainDefinitionSectionMetaSource implements FactoryBean<Ini.Section> {
//    @Autowired
//    private PermissionService permissionService;
    List<Permission> permissionList = null;
    	 
//        @Resource
//        private ResourceService resourceService;
     
        // 静态资源访问权限
        private String filterChainDefinitions = null;
     
        public Ini.Section getObject() throws Exception {
            Ini ini = new Ini();
            // 加载默认的url
            ini.load(filterChainDefinitions);
            Ini.Section section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
            // 循环Resource的url,逐个添加到section中。section就是filterChainDefinitionMap,
            // 里面的键就是链接URL,值就是存在什么条件才能访问该链接
            
            
            
//            List<TResources> lists = resourceService.listResources();
//            for (TResources resource : lists) {
//                // 构成permission字符串
//                if (StringUtils.isNotEmpty(resource.getResUrl()) && StringUtils.isNotEmpty(resource.getResKey())) {
//                    String permission = "perms[" + resource.getResKey() + "]";
//                    System.out.println(permission);
//                    // 不对角色进行权限验证
//                    // 如需要则 permission = "roles[" + resources.getResKey() + "]";
//                    section.put(resource.getResUrl() + "", permission);
//                }
//            }
//            
            
            
            
            // 所有资源的访问权限，必须放在最后
            /*section.put("/**", "authc");*/
            /** 如果需要一个用户只能登录一处地方,,修改为 section.put("/**", "authc,kickout,sysUser,user"); **/
            section.put("/**", "authc");
             
            System.out.println(section);
             
            return section;
        }
        
        
//     // 加载默认的url
//        ini.load(filterChainDefinitions);
//        Ini.Section section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
//        // 循环Resource的url,逐个添加到section中。section就是filterChainDefinitionMap,
//        // 里面的键就是链接URL,值就是存在什么条件才能访问该链接
//        List<ResourceEntity> lists = resourceService.getAll();
//        for (ResourceEntity resources : lists) {
//         
//        // 构成permission字符串
//        if (StringUtils.isNotEmpty(resources.getAction()) && StringUtils.isNotEmpty(resources.getPermission())) {
//         
//        String permission = "perms[" + resources.getPermission() + "]";
//        // 不对角色进行权限验证
//        // 如需要则 permission = "roles[" + resources.getResKey() + "]";
//        section.put(resources.getAction(), permission);
//         
//        }
////        }
//        // 所有资源的访问权限，必须放在最后
//        section.put("/**", "authc");
//        return section;
//         
//        }
        

        /**
         * 通过filterChainDefinitions对默认的url过滤定义
         * 
         * @param filterChainDefinitions
         *            默认的url过滤定义
         */
        public void setFilterChainDefinitions(String filterChainDefinitions) {
         
        this.filterChainDefinitions = filterChainDefinitions;
         
        }
         
        public Class<?> getObjectType() {
         
        return this.getClass();
         
        }
         
        public boolean isSingleton() {
         
        return false;
         
        }
}


/**
 * 产生责任链，确定每个url的访问权限
 * 
 */
//public class ChainDefinitionSectionMetaSource implements FactoryBean<Ini.Section> {
// 
//    @Resource
//    private ResourceService resourceService;
// 
//    // 静态资源访问权限
//    private String filterChainDefinitions = null;
// 
//    public Ini.Section getObject() throws Exception {
//        Ini ini = new Ini();
//        // 加载默认的url
//        ini.load(filterChainDefinitions);
//        Ini.Section section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
//        // 循环Resource的url,逐个添加到section中。section就是filterChainDefinitionMap,
//        // 里面的键就是链接URL,值就是存在什么条件才能访问该链接
//        List<TResources> lists = resourceService.listResources();
//        for (TResources resource : lists) {
//            // 构成permission字符串
//            if (StringUtils.isNotEmpty(resource.getResUrl()) && StringUtils.isNotEmpty(resource.getResKey())) {
//                String permission = "perms[" + resource.getResKey() + "]";
//                System.out.println(permission);
//                // 不对角色进行权限验证
//                // 如需要则 permission = "roles[" + resources.getResKey() + "]";
//                section.put(resource.getResUrl() + "", permission);
//            }
//        }
//        // 所有资源的访问权限，必须放在最后
//        /*section.put("/**", "authc");*/
//        /** 如果需要一个用户只能登录一处地方,,修改为 section.put("/**", "authc,kickout,sysUser,user"); **/
//        section.put("/**", "authc");
//         
//        System.out.println(section);
//         
//        return section;
//}
//    }